Example:
use serde::Deserialize;
// A trait that the Validate derive will impl
use validator::{Validate, ValidationError};
#[derive(Debug, Validate, Deserialize)]
struct SignupData {
#[validate(email)]
mail: String,
#[validate(phone)]
phone: String,
#[validate(url)]
site: String,
#[validate(length(min = 1), custom = "validate_unique_username")]
#[serde(rename = "firstName")]
first_name: String,
#[validate(range(min = 18, max = 20))]
age: u32,
}
fn validate_unique_username(username: &str) -> Result<(), ValidationError> {
if username == "xXxShad0wxXx" {
// the value of the username will automatically be added later
return Err(ValidationError::new("terrible_username"));
}
Ok(())
}
match signup_data.validate() {
Ok(_) => (),
Err(e) => return e;
};
Available Validations:
Validation | Notes |
---|---|
email |
|
url |
|
length |
|
range |
|
must_match |
|
contains |
|
custom |
|
regex |
|
credit_card |
(Requires the feature card to be enabled) |
phone |
(Requires the feature phone to be enabled) |
non_control_character |
(Required the feature unic to be enabled) |
nested |
(Uses the validation of the field type it self) |
required |
Checkout the project README of an in-depth usage description with examples.
Installation:
Add the validator to the dependencies in the Cargo.toml file.
[]
= { = "0.12", = ["derive"] }